// 数字 n 代表生成括号的对数，请你设计一个函数，用于能够生成所有可能的并且 有效的 括号组合。


// 看题解
// 执行用时：
// 4 ms
// , 在所有 C++ 提交中击败了
// 74.36%
// 的用户
// 内存消耗：
// 13.7 MB
// , 在所有 C++ 提交中击败了
// 27.42%
// 的用户
#include<vector>
#include<bits/stc++.h>
using  namespace std;


class Solution {
public:
    vector<string> res;
    vector<string> generateParenthesis(int n) {
        string s ="";
        dfs(s,n,n);
        return res;
    }

    void dfs(string s,int l ,int r){
        if(l==0 && r == 0){
            res.push_back(s);
        }
        if(l > 0){
            dfs(s+'(',l-1,r);
        }
        if(l<r){
            dfs(s+')',l,r-1);
        }
    }
};